package example.proxy.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


//动态代理中  玩具商店的作用
public class JavaProxyInvocationHandler implements InvocationHandler {
	//匿名的代理对象 obj 所以什么都能代理
	private Object obj;

//构造方法
	public JavaProxyInvocationHandler(Object obj) {
		this.obj = obj;
	}

//如何产生代理对象（匿名实现类）
	public Object newProxyInstance() {
		return Proxy.newProxyInstance(
				obj.getClass().getClassLoader(),//得到当前类的类加载器
				obj.getClass().getInterfaces(),//得到当前类的接口
				this);
	}


	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("方法之前");
		Object result = method.invoke(obj, args);
		System.out.println(proxy.getClass().getName()+method.getName());
		System.out.println("方法之后");
		return result;
	}
}